export default {
    // 使用名称空间,默认关闭
    namespaced: true,
    // 存储的数据
    // $store.state.模块名称.要使用的的数据
    state(){
        return {
            //用户登录的Token信息
            token:"",
            //登录用户信息
            loginInfo:{},
            //菜单列表
            menus:[],
            //导航标签
            tags:[{name:'首页',path:'/index',isClose:false}],
            //菜单是否折叠
            isFoldMenus:false,
            //选中激活的菜单
            currentActiveMenu:"",
            //选中激活的标签
            currentActiveTag:""
        }
    },
    // 计算存储的数据
    // $store.getters['模块名称/要使用的计算方法']
    // 方法名称:state=>(参数名称)=>{方法体}
    // $store.getters['模块名称/要使用的计算方法'](要传递的参数)
    getters: {
        GET_TOKEN:state=>state.token,//获取Token
        GET_MENUS:state=>state.menus,//获取菜单
        GET_LOGIN_INFO:state=>state.loginInfo,//获取登录信息
        GET_NAV_TAGS:state=>state.tags,//获取导航标签
        GET_BEFORE_NAV_TAG:state=>(name)=>{ //获取前一个标签
            let i = state.tags.findIndex(tag=>tag.name === name);
            let result = state.tags[i-1];
            return result;
        },
        GET_IS_FOLD_MENUS:state=>state.isFoldMenus, //是否最后一个菜单
        GET_CURRENT_ACTIVE_MENU:state=>state.currentActiveMenu,//获取选中的菜单
        GET_CURRENT_ACTIVE_TAG:state=>state.currentActiveTag,//获取选中的标签
    },
    // 更新存储的数据方法
    // $store.commit('模块名称/要调用的更新方法','传递的参数')
    mutations: {
        //用户登出删除所有用户信息
        DELETE_USER_TOKEN(state){
            state.token=""
            state.loginInfo={}
            state.menus=[]
            state.tags=[{name:'首页',path:'/index',isClose:false}]
            state.isFoldMenus=false
            state.currentActiveMenu=""
            state.currentActiveTag=""
        },
        //更新用户登录的Token信息
        UPDATE_TOKEN(state,value){
            state.token = value;
        },
        //更新用户登录的账号信息
        UPDATE_LOGIN_INFO(state,value){
            state.loginInfo = value;
        },
        //更新用户登录的菜单信息
        UPDATE_MENUS(state,value){
            state.menus = value;
        },
        //新增用户的导航标签
        ADD_NAV_TAG(state,value){
            if(state.tags.find(tag => {
                if(tag.name && tag.name === value.name){
                    return tag;
                }else{
                    return null;
                }
            }) === undefined){
                state.tags.push(value);
            }
        },
        //删除用户的某个导航标签根据名称
        DEL_NAV_TAG_NAME(state,value){
            state.tags = state.tags.filter(tag=>tag.name !== value);
        },
        //删除用户的某个导航标签根据索引
        DEL_NAV_TAG_INDEX(state,index){
            state.tags.split(index,1);
        },
        //更改菜单折叠状态
        UPDATE_FOLD_MENU_STATE(state,isFold){
            state.isFoldMenus = isFold;
        },
        //更新激活的菜单
        UPDATE_ACTIVE_MENU(state,menu){
            state.currentActiveMenu = menu;
        },
        //更新激活的标签
        UPDATE_ACTIVE_TAG(state,tag){
            state.currentActiveTag = tag;
        }
    },
    // 异步执行操作存储的数据
    // $.store.dispatch('模块名称/要异步调用的更新方法','传递的参数')
    actions: {
        //执行用户登出后删除所有数据
        DELETE_USER_TOKEN({commit}){
            commit('DELETE_USER_TOKEN')
        },
        //执行更新用户登录的TOKEN信息
        UPDATE_TOKEN({commit},data){
            commit('UPDATE_TOKEN',data);
        },
        //执行更新用户登录的账号信息
        UPDATE_LOGIN_INFO({commit},data){
            commit('UPDATE_LOGIN_INFO',data);
        },
        //执行更新用户登录的菜单信息
        UPDATE_MENUS({commit},data){
            commit('UPDATE_MENUS',data);
        },
        //执行新增用户的导航标签
        ADD_NAV_TAG({commit},data){
            commit('ADD_NAV_TAG',data);
        },
        //执行删除用户的某个导航标签根据名称
        DEL_NAV_TAG_NAME({commit},data){
            commit('DEL_NAV_TAG_NAME',data);
        },
        //执行删除用户的某个导航标签根据索引
        DEL_NAV_TAG_INDEX({commit},index){
            commit('DEL_NAV_TAG_INDEX',index);
        },
        //执行更改菜单折叠状态
        UPDATE_FOLD_MENU_STATE({commit},isFold){
            commit('UPDATE_FOLD_MENU_STATE',isFold);
        },
        //执行更新激活的菜单
        UPDATE_ACTIVE_MENU({commit},menu){
            commit('UPDATE_ACTIVE_MENU',menu);
        },
        //执行更新激活的标签
        UPDATE_ACTIVE_TAG({commit},tag){
            commit('UPDATE_ACTIVE_TAG',tag)
        }
    }
}